package com.bird.extension.pattern.simpleFactory.simple;

import com.bird.extension.pattern.simpleFactory.entity.DellMouse;
import com.bird.extension.pattern.simpleFactory.entity.HpMouse;
import com.bird.extension.pattern.simpleFactory.entity.LenovoMouse;
import com.bird.extension.pattern.simpleFactory.entity.Mouse;

/**
 * @Author: sijunqiang
 * @Date: 2020/3/31 0:00
 * @Description: 工厂模式 --简单工厂
 * 定义一个简单工厂,专门用来生产鼠标
 */
public class MouseFactory {

    /**
     * #####################简单工厂有关的知识点###################
     * 1:简单工厂的使用场景
     *   a:需要创建的对象较少
     *   b:客户端不关心对象的创建过程
     *2：简单工厂的优点和缺点
     *    a: 优点：可以对创建的对象进行加工，对客户端隐藏相关细节
     *    b: 缺点：新增和删除均会违反开闭原则
     *3：开闭原则的概念
     *  答：概念：一个软件实体,应该对扩展开放,对修改关闭。
     *     解释：应该通过扩张来实现变化,而不是通过修改已有的代码来实现变化
     *
     * */


    /**
     * <P>定义一个静态方法专门用来生产不同的鼠标</P>
     *
     * @param type 商家的类型
     * @return
     */
    public static Mouse createMouse(int type) {
        switch (type) {
            case 0:
                return new DellMouse();
            case 1:
                return new HpMouse();
            case 2:
                return new LenovoMouse();
            default:
                return new DellMouse();
        }
    }


    /**
     * 测试简单工厂模式
     *
     * @param args
     */
    public static void main(String[] args) {
        Mouse mouse = MouseFactory.createMouse(1);
        mouse.sayHello();
    }
}
